package com.dp.singleton;

/**
 * @Author: Ruomeng
 * @Date: 2024/11/5
 * @Description : 单例模式-懒汉式(线程安全)
 */
public class LazySingletonSafe {

    private LazySingletonSafe() {
    }

    //使用volatile保证变量可见性，屏蔽指令重排序
    private volatile static LazySingletonSafe instance;

    public static LazySingletonSafe getInstance() {
        // 第一次判断 instance为空 不进入抢锁阶段
        if (instance == null) {
            synchronized (LazySingletonSafe.class) {
                // 第二次判断 抢到锁之后再进行判断是否为空
                if (instance == null) {
                    instance = new LazySingletonSafe();
                }
            }
        }
        return instance;
    }

}
